var v = 0x60BDCB; //Magic number!
//Groups of 4 bytes at a time first
var size4 = entry.Size/4;
for (var i = 0; i < size4; ++i)
{
	//Magic numbers!
	var t = v*0x12FCF0A;
	v = t + 0x0BA53A7;
	var xor = BitConverter.ToInt32(buffer, i*4);
	var newVal = xor ^ v;

	//Assign new value
	var newValBytes = BitConverter.GetBytes(newVal);
	buffer[i*4 + 0] = newValBytes[0];
	buffer[i*4 + 1] = newValBytes[1];
	buffer[i*4 + 2] = newValBytes[2];
	buffer[i*4 + 3] = newValBytes[3];
}
//Remaining bytes, if not a multiple of 4
if (size4*4 != entry.Size)
{
	for (var i = size4*4; i < entry.Size; ++i)
	{
		var t = v*0x12FCF0A;
		v = t + 0x0BA53A7;
		var val = v >> 24;
		buffer[i] = (byte) (buffer[i] ^ val);
	}
}